Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aurura modexp #111

Merged
merged 5 commits into from
Aug 3, 2023
Merged

Aurura modexp #111

merged 5 commits into from
Aug 3, 2023

Conversation

shemnon
Copy link
Contributor

@shemnon shemnon commented Aug 3, 2023

No description provided.

Migrate all maven coordinates that were `.native.` to `.nativelib.`.
The old coordinate name presented problems in some auto-module systems
for the JPMS.

Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Port over aurora's modexp implementaiton.

Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Comment on lines +14 to +29
This function takes the base, exponent and modulus as big-endian encoded bytes and returns the result in big-endian as well.

This crate is meant to be an efficient implementation, using as little memory as possible (for example, it does not copy the exponent slice).
The exponentiation is done using the ["binary method"](https://en.wikipedia.org/wiki/Exponentiation_by_squaring).
The multiplication steps within the exponentiation use ["Montgomery multiplication"](https://en.wikipedia.org/wiki/Montgomery_modular_multiplication).
In the case of even modulus, Montgomery multiplication does not apply directly.
However we can reduce the problem to one involving an odd modulus and one where the modulus is a power of two.
These two sub-problems can be solved efficiently (the former using Montgomery multiplication, the latter the modular arithmetic is trivial on a binary computer),
then the results are combined using the [Chinese remainder theorem](https://en.wikipedia.org/wiki/Chinese_remainder_theorem).

The primary academic references for this implementation are:

1. [Analyzing and Comparing Montgomery Multiplication Algorithms](https://www.microsoft.com/en-us/research/wp-content/uploads/1996/01/j37acmon.pdf)
2. [Montgomery Reduction with Even Modulus](http://www.people.vcu.edu/~jwang3/CMSC691/j34monex.pdf)
3. [A Cryptographic Library for the Motorola DSP56000](https://link.springer.com/content/pdf/10.1007/3-540-46877-3_21.pdf)
4. [The Art of Computer Programming Volume 2](https://www-cs-faculty.stanford.edu/~knuth/taocp.html)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor

@garyschulte garyschulte left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM,
confirmed the minor diff with mpnat and arith against the sha posted and otherwise I am deferring to the quality of this impl in aurora.

@shemnon shemnon merged commit 16ddcd1 into hyperledger:main Aug 3, 2023
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants